iT邦幫忙

2024 iThome 鐵人賽

DAY 1
3
Kubernetes

Kubernetes圖解筆記系列 第 1

Day-1 在學習 Kubernetes 之前 - 容器化

  • 分享至 

  • xImage
  •  

在了解 kubernetes 需要先具備的基本知識 (⁎⁍̴̛ᴗ⁍̴̛⁎)

在剛開始接觸軟體開發的時候...

要運作一套系統,只需要有一台機器,包含各種硬體資源,機器上安裝好作業系統,就可以準備把程式放上去執行了。

像這樣:
https://ithelp.ithome.com.tw/upload/images/20240902/2016843742Z6qIhyVk.png

特性:

資源和環境由所有運行在機器上的服務共同使用。
系統間容易互相干擾、爭搶資源。

傳統的系統運作方式就像建了一個大廚房讓所有餐廳共用的美食廣場,起初商家進駐時相安無事,但隨著業務增長,不但各自需要的空間增加,需求也更複雜。所有廚師們共用一個廚房... 應該不難想像會發生什麼事:壽司飯沾染咖哩的香料味、烤箱的高溫讓隔壁的義式冰淇淋拿出來就融化,廚師們搶爐子搶冰箱,東奔西跑亂成一團。


經理想著:那讓每家餐廳都有獨立的店面吧?

將每家餐廳搬到獨立的店面,大家都有自己的廚房不就解決問題了嗎?
(當然,水電這些基礎資源還是共用的)

於是,虛擬化技術出現了。
https://ithelp.ithome.com.tw/upload/images/20240902/20168437BnYiEtkYxc.png

  • Host OS: 實體硬體上的作業系統,管理整體資源,提供運行 Hypervisor 和虛擬機的基礎。
  • Hypervisor:將硬體資源分割並分配給虛擬機。
  • Guest OS:VM 上的作業系統,運行應用程式。
  • VM:虛擬機, virtual machine

虛擬化技術(Virtualization

是一種將資源抽象化的技術,讓一台實體機可以運行多個虛擬環境,而且這些環境每一個都是各自獨立的,擁有自己的作業系統。
虛擬化技術的出現大大提升了資源調度的靈活性。
Hypervisor 的運作下:

  • 虛擬機之間完全隔離
  • 可以動態分配和調整硬體資源
  • 依需求運行不同作業系統
    ( Host OS &Guest OS、Guest OS &Guest OS 之作業系統皆不需一致)

自從採用虛擬化建置系統,開發人員就不用再為了處理依賴衝突或是配合不同的作業系統不斷開新機器啦!還可以隨時因應業務需要調整配置,不必擔心其他系統受影響,能更有效地使用硬體資源。
不過相對的,為使資源能完全隔離,每台虛擬機器都需要配置自己的作業系統,會消耗更多資源且啟動時間也比較長。

特性:

虛擬機之間完全隔離。
每台虛擬機都有完整的操作系統和虛擬硬體,比起傳統方式會消耗更多資源。
每次都需要啟動完整的操作系統。


經理發現了問題:開餐廳的成本好像高了不少...

雖然清楚區分了每家餐廳,不過原先可以共用的廚具現在得一家一套了。任何商家要進駐或是撤離都不免勞師動眾,就算不重新裝潢也難免需要調整設備。

時常在夜市擺攤的烤餅老闆向經理提出了建議:試試看用餐車怎麼樣?

https://ithelp.ithome.com.tw/upload/images/20240902/20168437WlUDDZCCSk.png

  • container:容器。輕量級、可移植的軟體封裝單元。
  • container runtime:是管理和運行 container 的軟體層


現在,美食餐廳的商家都改成了餐車,餐車裡包含了營業所需的一切:廚具、原料、客製化的烹飪環境。這些餐車可以在美食廣場內隨意配置位置,不論移動到哪裡都可以迅速開始營業,休息時還能收起來節省空間。一但遇到人潮眾多,還能快速加開新餐車立刻營業!

容器化(Containerization)

將應用程式放在容器內,容器中含應用程式運行所需的一切:執行檔、程式碼、程式庫和組態檔等...,使其變得輕量且容易遷移的技術。

容器化由所有容器 (Container) 共享 Host OS,雖說隔離性沒有虛擬化好(但實務上也夠用),卻也降低了 VM 中 Guest OS 資源無法重複使用的缺點,同時省去啟動服務時執行 Guest OS 的時間。

當然,就像虛擬化需要Hypervisor,容器化也需要一層中介來調度資源和運行容器。
Container Runtime 就是管理和運行容器的軟體層,負責處理容器的生命周期。只要確保 Container Runtime 正常運行,輕量的容器不但易於搬遷, 啟動快速的特性也為容器化技術賦予了高擴展性。

不過,容器通常需要與硬體機器運行相同的操作系統,無法像虛擬化那樣在同一台機器上運行完全不同的作業系統。且由於作業系統的設計和特性,容器化技術幾乎都使用在 Linux 上(註),

特性:

輕量,容易搬遷且啟動速度快。
一致性強,可以確保在不同環境下的行為一致。
需與硬體機器運行相同的作業系統。

小結

虛擬機和容器都是透過虛擬化和封裝使硬體資源能更妥善被利用的方式。
虛擬機封裝了作業系統、所有軟體層和多個應用程式;容器則不包含作業系統。
兩者各有適用場景。

簡單總結兩者特性:

  • 資源利用率: 容器化更輕量,資源利用率更高(一般為 MB);虛擬化的資源消耗較大(一般為 GB)。
  • 隔離性: 虛擬化提供更強的隔離性,但容器化的隔離性在一般場景下已足夠使用。
  • 啟動速度: 容器快得多,幾乎是立刻啟動(秒級);虛擬機則為分鐘級。
  • 搬遷難易度: 容器化因其一致性和輕量特性,更利於DevOps流程和雲端環境。

註(1)
Namespaces 和 Cgroups

  • Namespaces: Linux 的 namespaces 技術允許系統將資源隔離到不同的容器中,使每個容器看起來像是獨立運行在一個完整的系統上。
  • Cgroups: Cgroups 允許 Linux 核心管理和限制容器對 CPU、Memory、磁碟 I/O 等系統資源的使用。這使得多個容器能夠在共享的系統資源上高效運行,並且不互相干擾

下一篇
Day-2 在學習 Kubernetes 之前 - Docker(1)
系列文
Kubernetes圖解筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言